home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_138 / modulatools / modulatools.source / windowtools.def < prev    next >
Text File  |  1992-05-06  |  9KB  |  149 lines

  1. (******************************************************************************)
  2. (*                                                                            *)
  3. (*    The global constants and variables defined in this module are optional: *)
  4. (* if you don't want to access their features, you needn't import them into   *)
  5. (* your program. The variables in the parameter lists of the procedures are   *)
  6. (* the only variables you are required to supply.                             *)
  7. (*    When describing the order in which certain routines are called, I have  *)
  8. (* adopted the curly-bracket notation of EBNF: routines in curly brackets {}  *)
  9. (* may be called an arbitrary number of times (0 to n). A, {B}, {C, {D}} thus *)
  10. (* implies that A is called once, followed by an arbitrary number of calls to *)
  11. (* to B, followed by an arbitrary number of calls to C. Each of the calls to  *)
  12. (* C may be followed by an arbitrary number of calls to D. Likewise, {{C},{D}}*)
  13. (* implies an arbitrary number of calls to C and D in any order.              *)
  14. (*                                                                            *)
  15. (******************************************************************************)
  16. (*                                                                            *)
  17. (*  Version 1.00a.002 (Beta) :   March 2, 1988                                *)
  18. (*                                                                            *)
  19. (*    These procedures were originally written under version 1.20 of the TDI  *)
  20. (* Modula-2 compiler. I have rewritten this module to operate under the v2.00 *)
  21. (* compiler. However, should you find any problem or inconsistency with the   *)
  22. (* functionality of this code, please contact me at the following address:    *)
  23. (*                                                                            *)
  24. (*                               Jerry Mack                                   *)
  25. (*                               23 Prospect Hill Ave.                        *)
  26. (*                               Waltham, MA   02154                          *)
  27. (*                                                                            *)
  28. (*    Check the module MenuUtils for TDI's (considerably less powerful) ver-  *)
  29. (* sions of my Menu and IntuitionText procedures. The modules GadgetUtils and *)
  30. (* EasyGadgets should also be of great help.                                  *)
  31. (*                                                                            *)
  32. (******************************************************************************)
  33. (*                                                                            *)
  34. (*    The source code to WindowTools is in the public domain. You may do with *)
  35. (* it as you please.                                                          *)
  36. (*                                                                            *)
  37. (******************************************************************************)
  38.  
  39. DEFINITION MODULE WindowTools;
  40.  
  41. FROM GraphicsBase    IMPORT GfxBasePtr;
  42. FROM GraphicsLibrary IMPORT BitMapPtr;
  43. FROM Intuition       IMPORT ScreenPtr, ScreenFlagSet, WindowPtr, WindowFlagSet,
  44.                             IDCMPFlagSet, IntuitionBasePtr;
  45. FROM Strings         IMPORT String;
  46. FROM Views           IMPORT ModeSet;
  47.  
  48.  
  49. CONST
  50.    NoTitle = 0C;                      (* no title for screen and/or window *)
  51.  
  52. VAR
  53.    ViewFeatures    : ModeSet;         (* ViewPort type and capabilities    *)
  54.    ScreenBitMap    : BitMapPtr;       (* custom Screen bitmap, if desired  *)
  55.    ScreenFeatures  : ScreenFlagSet;   (* Screen type and capabilities      *)
  56.    TextPen         : INTEGER;         (* color of text drawn in Screen     *)
  57.    FillPen         : INTEGER;         (* color of background in Screen     *)
  58.    MinWindowWide   : INTEGER;         (* minimum width  of next Window     *)
  59.    MaxWindowWide   : INTEGER;         (* maximum width  of next Window     *)
  60.    MinWindowHigh   : INTEGER;         (* minimum height of next Window     *)
  61.    MaxWindowHigh   : INTEGER;         (* maximum height of next Windwo     *)
  62.    WindowBitMap    : BitMapPtr;       (* custom Window bitmap, if desired  *)
  63.    WindowFeatures  : WindowFlagSet;   (* Window type and capabilities      *)
  64.    IDCMPFeatures   : IDCMPFlagSet;    (* types of Intuition messages wanted*)
  65.    UserIntuiBase   : IntuitionBasePtr;(* address of IntuitionBase          *)
  66.    UserGraphBase   : GfxBasePtr;      (* address of GraphicsBase           *)
  67.  
  68.  
  69.    PROCEDURE OpenGraphics () : BOOLEAN;
  70.  
  71.    PROCEDURE CreateScreen (Left, Top, Wide, High : INTEGER;   (* Input *)
  72.                            Bitplanes             : INTEGER;   (* Input *)
  73.                            VAR ScreenTitle       : String)    : ScreenPtr;
  74.    
  75.    PROCEDURE CreateWindow (Left, Top, Wide, High : INTEGER;   (* Input *)
  76.                            VAR WindowTitle       : String;    (* Input *)
  77.                            UserScreen            : ScreenPtr) : WindowPtr;
  78.                          
  79.    PROCEDURE CloseGraphics ();
  80.  
  81.  
  82.           (* Variables reset in PROCEDURE OpenGraphics (): *)
  83.  
  84. (*  TextPen = 0  MinWindowWide = 30  MinWindowHigh = 20  ScreenBitMap = NULL *)
  85. (*  FillPen = 1  MaxWindowWide =  0  MaxWindowHigh =  0  WindowBitMap = NULL *)
  86. (*  ViewFeatures   = Empty                                                   *)
  87. (*  ScreenFeatures = CustomScreen                                            *)
  88. (*  IDCMPFeatures  = MenuPick, CloseWindowFlag, NewSize, GadgetUp            *)
  89. (*  WindowFeatures = SmartRefresh, WindowSizing, WindowDrag, WindowDepth,    *)
  90. (*                   Activate, ReportMouseFlag                               *)
  91.  
  92. (* OpenGraphics may return a value of FALSE if either the IntuitionLibrary   *)
  93. (* or the GraphicsLibrary could not be opened. Whichever of UserIntuiBase or *)
  94. (* UserGraphBase = NULL is the library which could not be opened. You needn't*)
  95. (* call CloseGraphics in such a case.                                        *) 
  96.  
  97. (* Both CreateScreen and CreateWindow do extensive checking to ensure that   *)
  98. (* you don't exceed the performance limits of the Amiga. (I am FED UP with   *)
  99. (* crashes!!) If you find any combination which doesn't work properly, I     *)
  100. (* would appreciate your dropping me a line describing the invocation. Also, *)
  101. (* Left and Top are measured from the upper-left corner of the display in    *)
  102. (* CreateScreen, whereas in CreateWindow they are measured from the upper-   *)
  103. (* left corner of the Screen in which the Window will appear.                *) 
  104.  
  105. (* If UserScreen = NULL, then the Window will open in the WorkBench Screen;  *)
  106. (* otherwise, it will open in the UserScreen.                                *) 
  107.  
  108. (* ScreenBitMap and WindowBitMap are pointers to custom bitmaps. Unless you  *)
  109. (* want to manage your own bitmaps, you should leave these alone (= NULL).   *)
  110.  
  111. (* TextPen and FillPen are chosen from the color palette; the number of pens *)
  112. (* available = 2**bitplanes { or 2^bitplanes }. Any pen choice outside of    *)
  113. (* this range results in choice wraparound, which I assume is done by ignor- *)
  114. (* ing illegal higher-order bits.                                            *)
  115.  
  116. (* ViewFeatures determines the type of ViewPort in which you wish your Screen*)
  117. (* to be rendered. Setting this to the appropriate value allows you to obtain*)
  118. (* high-resolution, interlaced, HAM, ExtraHalfBright, etc. ViewPorts.        *)
  119.  
  120. (* ScreenFeatures determines how the Screen will appear in the display and   *)
  121. (* whether or not the new Screen will be a CustomScreen.                     *)
  122.  
  123. (* WindowFeatures determines how the Window will appear in the display,what  *)
  124. (* type of Gadgets you wish attached to it and how it will be refreshed.     *)
  125.  
  126. (* MinWindowWide, MaxWindowWide, MinWindowHigh and MaxWindowHigh are only of *)
  127. (* use if the Window has a sizing gadget: INCL(WindowFeatures, WindowSizing).*) 
  128. (* If any of these is set to 0, then the limit of that dimension will be the *)
  129. (* current dimension of the Window.                                          *)
  130.  
  131. (* IDCMPFeatures determines which messages your Window will receive from In- *)
  132. (* tuition. If your program isn't responding to certain gadgets or events,   *)
  133. (* check that you have included the proper notification flags here.          *)
  134.  
  135. (* CloseGraphics should not be called until you close ALL the Windows and    *)
  136. (* Screens opened with the above procedures. Otherwise...                    *)
  137.  
  138. (* If you want to open Windows and/or Screens without using these procedures,*)
  139. (* you should assign IntuitionBase and GraphicsBase to UserIntuiBase and     *)
  140. (* UserGraphBase, resp. This allows you to use the libraries opened in the   *)
  141. (* procedure OpenGraphics as opposed to opening your own versions of these   *)
  142. (* libraries.                                                                *)
  143.  
  144. (* The order in which these procedures is called is as follows: OpenGraphics,*)
  145. (* {{CreateScreen}, {CreateWindow}}, CloseGraphics.                          *)
  146.  
  147.  
  148. END WindowTools.
  149.